return certs;
}),
L.resolveDefault(fs.exec_direct('/usr/libexec/acmesh-dnsinfo.sh'), ''),
- L.resolveDefault(fs.stat('/usr/lib/acme/client/dnsapi'), null),
+ L.resolveDefault(fs.list('/usr/lib/acme/client/dnsapi/'), null),
L.resolveDefault(fs.lines('/proc/sys/kernel/hostname'), ''),
L.resolveDefault(uci.load('ddns')),
]);
)
);
o.depends('acme_server', '');
- o.depends('acme_server', 'letsencrypt');
o.optional = true;
o.modalonly = true;
}
});
+/**
+ * Is not an IP or a local domain without TLD
+ */
function _isFqdn(domain) {
- // Is not an IP i.e. starts from alphanumeric and has least one dot
- return /[a-z0-9-]\..*$/.test(domain) && !/[0-9-]\..*$/.test(domain);
+ let i = domain.lastIndexOf('.');
+ if (i < 0) {
+ return false;
+ }
+ let tld = domain.substr(i + 1);
+ if (tld.length < 2) {
+ return false;
+ }
+ return /^[a-z0-9]+$/.test(tld);
}
function _guessDomain(hostname) {
if (credentials.length > 0) {
ddnsDomains.push({
sectionId: ddnsService['.name'],
- domains: [ddnsService['domain'], '*.' + ddnsService['domain']],
+ domains: [ddnsService['domain'], ddnsService['domain']],
dnsApi: dnsApi,
credentials: credentials,
});
"read": {
"cgi-io": [ "exec" ],
"file": {
+ "/usr/lib/acme/client/dnsapi": [ "list" ],
"/proc/sys/kernel/hostname": [ "read" ],
"/etc/ssl/acme": [ "list" ],
"/usr/libexec/acmesh-dnsinfo.sh": [ "exec" ],
"/sbin/logread -e acme": [ "exec" ],
"/usr/sbin/logread -e acme": [ "exec" ]
},
- "uci": [ "acme" ]
+ "uci": [ "acme", "ddns" ]
},
"write": {
"uci": [ "acme" ]